import base from '@/base';
import platform from "@/wlkutils/platform";
import {router} from "@/wlkutils/router";
import store from '@/wlkutils/store';

module.exports = (vm) => {
// 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = base.apiUrl;
        /* 根域名 */
        config.header = {
            'content-type': 'application/json;charset=UTF-8',
            'platform': platform.get(),
        }
        config.validateStatus = (code) => { // statusCode 必存在。此处示例为全局默认配置
            return code >= 200 && code < 402
        }
        config.custom = {
            load: true,//是否显示加载动画
            isFactory: true,//true:返回的数据成功只返回data  false:返回response
            catch: true,//默认数据返回不成功进入catch返回
            // auth: true,//token
        }
        return config
    })

// 请求拦截
    uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
        // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
        config.data = config.data || {}
        let token = uni.getStorageSync('token');
        if (token) {
            config.header.token = token
        }
        if (config.custom.load){
            store.commit("setLoadingShow", true);
        }
        return config
    }, config => { // 可使用async await 做异步操作
        return Promise.reject(config)
    })


    uni.$u.http.interceptors.response.use(async (response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
        store.commit("setLoadingShow", false);
        
        // console.log(response)
        let httpData = response.data
        if (typeof (httpData) == "string") {
            httpData = JSON.parse(httpData);
        }
        const custom = response.config?.custom;
        //判断数据是否请求成功
        if (httpData.code == 1) {
            // 返回正确的结果(then接受数据)
            return httpData || {};
        } else {
            if(httpData.code == 401){
                store.commit("setLoginPopupShow", true);
            }
            if(!custom.hideMsg){
                uni.$u.toast(httpData.msg);
            }
            // 返回错误的结果(catch接受数据)
            return Promise.reject({
                error: 1,
                message: (httpData.msg),
            });
        }

        return response || {}
    }, (response) => {
        // 关闭加载动画
        store.commit("setLoadingShow", false);
        // 对响应错误做点什么 （statusCode !== 200）
        let errorData = '请检查网络或服务器'
        let message = response.message || response.msg
        if (message == "request:fail url not in domain list") {
            errorData = '检查请求域名是否添加了域名白名单'
        } else if (message == 'request:fail timeout') {
            errorData = '请求超时:请检查网络'
        } else {
            errorData = message || '请检查网络或服务器'
        }
        uni.$u.toast(errorData)
        return Promise.reject(response)
    })
}
